package in.ac.dei.edrp.cms.dao.studentregistration;

/**********************************************************************************
 * $URL:
 * Licensed under the Educational Community License, Version 1.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *      .............
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 **********************************************************************************/
import in.ac.dei.edrp.cms.domain.enrollment.EnrollmentInfo;
import in.ac.dei.edrp.cms.domain.studentregistration.CourseInfoGetter;
import in.ac.dei.edrp.cms.domain.studentregistration.StudentInfoGetter;

import java.sql.SQLException;
import java.util.List;


/**
 * This interface is being used
 * for Student registration form
 * @author Manpreet Kaur
 * @version 1.0
 * @date 20-01-2011
 */
public interface StudentVerificationDao {
    /**
    * Method for fetching list of students with their corresponding details based on
    * entity, program, branch, specialization,semester, semester start date, semester end date basis
    * @param programObject
    * @return object containing students detail list
    * @throws Exception
    */
    List<StudentInfoGetter> getStudentBasicDetails(
        StudentInfoGetter programObject) throws Exception;

    /**
     * Method for fetching component list with their verification status for a particular student
     * and for inserting verification components that were laterly added to system.
     * @param studentObject
     * @return object containing component list
     * @throws Exception
     */
    List<StudentInfoGetter> getComponentVerificationDetails(
        StudentInfoGetter studentObject) throws Exception;

    /**
     * Method for updating component verification status for student and
     * for setting verified status as "verified" if all components for student
     * are verified else "unverified".
     * @param studentObject
     * @throws Exception
     */
    void saveComponentStatus(StudentInfoGetter[] studentObject)
        throws Exception;

    /**
     * Method for fetching full details of student
     * @param inputObj containing student's key information
     * @return Object containing student's full details
     * @throws Exception
     */
    StudentInfoGetter getStudentFullDetails(StudentInfoGetter inputObj)
        throws Exception;

    /**
     * Method for getting list of courses opted by student
     * @param inputObj
     * @return
     * @throws Exception
     */
    List<CourseInfoGetter> getCourseList(StudentInfoGetter inputObj)
        throws Exception;
    /**
     * Method For getting personal details of enrolled student
     * @param enrollmentInfo 
     * @return List Containing personal details
     */
    List<EnrollmentInfo> getEnrollmentPersonalDetails(EnrollmentInfo enrollmentInfo);
    
    /**
     * Method for getting enrollment academic details
     * @param enrollmentInfo
     * @return List containing of academic details
     */
    List<EnrollmentInfo> getEnrollmentAcademicDetails(EnrollmentInfo enrollmentInfo);
    
    /**
     * Method for updating the status of the student
     * @param enrollmentInfo
     * @return
     * @throws SQLException 
     */
    int updateStudentStatus(EnrollmentInfo enrollmentInfo) throws SQLException;
    
    
}
